#ifndef _PWM_H_
#define _PWM_H_
#include "reg52.h"

sbit left1=P0^2;
sbit left2=P0^3;
sbit right1=P0^1;
sbit right2=P0^0;
#define Left_moto_go	{ left1 = 0, left2 = 1; } //左电机向前走
#define Left_moto_back	{ left1 = 1, left2 = 0; } //左边电机向后转
#define Left_moto_stop	{ left1 = 0, left2 = 0; } //左边电机停转
#define Right_moto_go	{ right1 = 1, right2 = 0; } //右边电机向前走
#define Right_moto_back { right1 = 0, right2 = 1; } //右边电机向后走
#define Right_moto_stop { right1=0 , right2=0; } //右边电机停转

typedef unsigned char u8;
//控制速度
u8 V_left = 0; //左电机占空比
u8 V_right = 0; //右电机占空比
//控制方向，1为向前
u8 dir_left = 1;
u8 dir_right = 1;
//目前到达的脉冲位置
u8 now_left = 0;
u8 now_right = 0;

/**************接口函数***************/
void setV(u8 left,u8 right) //这里设定的是绝对速度
{
	V_left = left;
	V_right = right;
}

void setDir(u8 left,u8 right)
{
	dir_left=left;
	dir_right=right;
}

void leftMove(void)
{
	if(dir_left)
		Left_moto_go
	else
		Left_moto_back
}

void rightMove(void)
{
	if(dir_right)
		Right_moto_go
	else
		Right_moto_back
}

void move(void) //根据先前设定的值实际移动的函数，需要在设定值之后手动进行调用
{
	leftMove();
	rightMove();
}

void stop(void) //需要进行手动调用
{
	V_left=0;
	V_right=0;
}


/************非接口函数*************/
void pwm_out_left_moto( void )
{
		if ( now_left <= V_left )
		{
			leftMove();
		} 
		else  
		{
			Left_moto_stop
		}
		if ( now_left >= 20 )
			now_left = 0;
}

void pwm_out_right_moto( void )
{
		//看在不在宽度内，在就开电机
		if ( now_right <= V_right )
		{
			rightMove();
		} 
		else      
		{
			Right_moto_stop
		}
		//计时超过20复位
		if ( now_right >= 20 )
			now_right = 0;
}

void timer0() interrupt 1 using 2
{
	TH0	= 0XFc; //1ms
	TL0	= 0X18;
	now_left++;
	now_right++;
	pwm_out_left_moto();
	pwm_out_right_moto();
}

#endif